Hallo zusammen, in diesem Video geht es um die Virtualisierung von Containern mit Docker.
Bei der Virtualisierung gibt es verschiedene Ansätze, jeweils für unterschiedliche Schichten.
Wenn man Virtualisierung hört, denken viele als erstes an die Vollvirtualisierung einer
virtuellen Maschine mit einem Hypervisor.
Hier wird die Hardware und Architektur eines Rechners abgebildet, man kann dann beliebig
ganze Betriebssysteme darauf virtualisieren.
Wie dein Name schon andeutet, behält sich jede VM quasi wie eine eigene Maschine.
Das macht den Ansatz sehr mächtig, aber auch sehr teuer.
Dagegen steht die Container-basierte Virtualisierung.
Hier wird nicht die Hardware-Schicht, sondern ein Betriebssystem als Grundlage verwendet.
Daher benötigt man keinen Hypervisor mehr.
In einem Container laufen jetzt keine Betriebssysteme, sondern nur noch Anwendungen.
Da nicht für jeden Container ein ganzes Betriebssystem aufgesetzt und hochgezogen werden muss, sind
Container deutlich leichtgewichtiger, sowohl was die Größe angeht als auch die Startzeit.
Der Nachteil ist dabei natürlich, dass man an den unter der Containerschicht liegenden
Betriebssystemkernel und dessen Konfiguration gebunden ist.
Im Rahmen dieser Übung betrachten wir die mittlerweile sehr weit verbreitete Container-Virtualisierungsplattform
Docker.
Auf unserer Webseite verlinkt findet ihr einen Vortrag vom Docker-Gründer und CTO Solomon
Hikes.
Das ist natürlich keine Pflichtlektüre, besonders die ersten 10 Minuten sind aber sehr interessant.
Hier erzählt Hikes, was seine grundlegende Idee hinter Docker war.
Schauen wir uns zuerst an, wie die Architektur der Docker Engine aufgebaut ist.
Damit unsere Docker-Container laufen können, muss die Docker Engine als Schnittstelle zwischen
Gastbetriebssystem und Container dienen.
Grundlegend setzt Docker dabei auf bekannte Linux-Techniken, auch wenn es mittlerweile
Möglichkeiten gibt, Docker-Container auch auf Windows oder MacOS laufen zu lassen.
Einige Features des Linux-Kernels sind dabei besonders wichtig für Docker.
Cgroups für die Ressourcenverwaltung, Namespaces und andere Sicherheitsfeatures zur Abgrenzung
der Container vom Rest des Systems und natürlich Dateisysteme.
Docker war einige Zeit lang der Platzhörsch in der Containervirtualisierung und hat daher
einigen Einfluss gehabt.
So zum Beispiel mit ContainerD und RunC.
ContainerD ist eine Laufzeitumgebung zur Verwaltung von Images und Containern, die ursprünglich
aus Docker entstanden ist, mittlerweile aber ein Standalone-Projekt ist.
Dasselbe gilt für RunC, einer sehr leichtgewichtigen universellen Laufzeitumgebung für Container
basierend auf Linux.
Auch das ist mittlerweile eigenständig und wird von vielen anderen Containervirtualisierungsplattformen,
unter anderem auch von ContainerD, verwendet.
Um laufenden Containern Ressourcen zu zuweisen, verwendet Docker Cgroups.
Cgroups ist ein Mechanismus von Linux, der Ressourcen von Prozesse einerseits analysieren
und andererseits zuteilen kann.
Cgroups organisiert die Prozesse dabei in einer hierarchischen Struktur.
Cgroups kann dabei den Speicherverbrauch und die IOU eines Prozesses, aber auch den
CPU-Zugriff kontrollieren.
Da man üblicherweise mehr als einen Container auf einem System laufen lassen möchte, kann
man so sicherstellen, dass nicht ein einzelner Container das System komplett beansprucht,
sei es absichtlich oder doch ein Fehler.
Neben dem maximalen Ressourcenverbrauch kann Cgroups dabei auch bestimmte Ressourcen festzuteilen.
In Numersystemen können so Prozesse zum Beispiel in eine feste CPU gepinnt werden.
Presenters
Zugänglich über
Offener Zugang
Dauer
00:24:28 Min
Aufnahmedatum
2020-12-11
Hochgeladen am
2020-12-11 19:38:34
Sprache
de-DE
Virtualisierung von Containern mit Docker